/*
* 
* Fichier source projet intel Acceler8 sous license GNU GPL v3.
* Voir http://www.gnu.org/copyleft/gpl.html pour plus d'informations
* La license est egalement disponible dans le repertoire /doc
* 
* Cree le : mardi 01 novembre 2011 à 21 : 56.
* Auteurs : Axel MOINET et Arnaud DURAND.
* 
* Nom de fichier : ligne.cpp
* Chemin du fichier : src/classes/ligne/ligne.cpp
* 
* Description : Classe d'implémentation de la lecture d'une ligne dans le fichier
* et stockage dans une chaine de caracteres dynamique (vector) optimise pour le traitement parallele.
* Doit être utilisee en tant que filtre de base pour le pipeline de lecture du fichier
* 
*/

/*
 * TODO : Rajouter le lancement d'exceptions lors d'erreurs
 */

#include "readLine.h"
#include <stdio.h>

readLine::readLine() : filter(serial_in_order) {

}

readLine::readLine(FILE *p_fichier) : filter(serial_in_order) {
	if(p_fichier != NULL)
		this->fichierEntree = p_fichier;
	else{
		this->fichierEntree = NULL;
		//Lancer une exception de type pointeur nul
	}
}

readLine::~readLine() {

}

void* readLine::operator ()(void *) {
	char *caractereLu = new char;
	bool continuer = true;
	int i=0;

	//Verification de validité du pointeur de fichier
	if(fichierEntree == NULL)
		//Lancer une exception de type pointeur nul
		throw std::bad_exception();

	//Commencer la lecture du fichier

	// Allocation du tableau dynamique
	this->chaineCaractere = new concurrent_vector<char>();

	do {
		this->octetsLus = fread(caractereLu, sizeof(char), 1, fichierEntree);
		if(*caractereLu != '\n'){
			this->chaineCaractere->grow_by(sizeof(char));
			*(this->chaineCaractere)[i] = *caractereLu;
			i++;
		}
		else
			continuer = false;
	}while(continuer);

	delete(caractereLu);
	return chaineCaractere;
}
